import java.io.*;
import java.util.*;
   
public class Main {
        public static void main(String[] args) {
        	String diretorio = "scriptsPraTeste\\";
        	
        	ArrayList<String> arquivos = new ArrayList<String>();
        	
        	arquivos.add(diretorio + "declaracaoProcedimentoCerto.php");
        	arquivos.add(diretorio + "declaracaoProcedimentoErrado1.php");
        	arquivos.add(diretorio + "declaracaoProcedimentoErrado2.php");
        	arquivos.add(diretorio + "declaracaoFuncaoCerto.php");
        	arquivos.add(diretorio + "declaracaoFuncaoErrado1.php");
        	arquivos.add(diretorio + "declaracaoFuncaoErrado2.php");
        	arquivos.add(diretorio + "declaracaoFuncaoErrado3.php");
        	arquivos.add(diretorio + "ifCerto.php");
        	arquivos.add(diretorio + "ifErrado1.php");
        	arquivos.add(diretorio + "ifErrado2.php");
        	arquivos.add(diretorio + "ifErrado3.php");
        	arquivos.add(diretorio + "ifErrado4.php");
        	arquivos.add(diretorio + "ifErrado5.php");
        	arquivos.add(diretorio + "switchCerto.php");
        	arquivos.add(diretorio + "switchErrado1.php");
        	arquivos.add(diretorio + "switchErrado2.php");
        	arquivos.add(diretorio + "switchErrado3.php");
        	arquivos.add(diretorio + "atribuicaoCerto.php");
        	arquivos.add(diretorio + "atribuicaoErrado1.php");
        	arquivos.add(diretorio + "atribuicaoErrado2.php");
        	arquivos.add(diretorio + "atribuicaoErrado3.php");
        	arquivos.add(diretorio + "aritmeticaCerto.php");
        	arquivos.add(diretorio + "aritmeticaErrado1.php");
        	arquivos.add(diretorio + "aritmeticaErrado2.php");
        	arquivos.add(diretorio + "aritmeticaErrado3.php");
        	arquivos.add(diretorio + "aritmeticaErrado4.php");
        	arquivos.add(diretorio + "booleanaCerto.php");
        	arquivos.add(diretorio + "booleanaErrado1.php");
        	arquivos.add(diretorio + "booleanaErrado2.php");
        	arquivos.add(diretorio + "expressaoRelacionalCerto.php");
        	arquivos.add(diretorio + "expressaoRelacionalErrado1.php");
        	arquivos.add(diretorio + "expressaoRelacionalErrado2.php");
        	arquivos.add(diretorio + "expressaoRelacionalErrado3.php");
        	arquivos.add(diretorio + "literalCerto.php");
        	arquivos.add(diretorio + "literalErrado1.php");
        	arquivos.add(diretorio + "literalErrado2.php");
        	arquivos.add(diretorio + "literalErrado3.php");
        	arquivos.add(diretorio + "literalErrado4.php");
        	arquivos.add(diretorio + "literalErrado5.php");
        	arquivos.add(diretorio + "literalErrado6.php");
        	arquivos.add(diretorio + "arranjoCerto.php");
        	arquivos.add(diretorio + "arranjoErrado1.php");
        	arquivos.add(diretorio + "arranjoErrado2.php");
        	arquivos.add(diretorio + "arranjoErrado3.php");
        	arquivos.add(diretorio + "comIterWhileCerto.php");
        	arquivos.add(diretorio + "comIterWhileErrado1.php");
        	arquivos.add(diretorio + "comIterWhileErrado2.php");
        	arquivos.add(diretorio + "comIterWhileErrado3.php");
        	arquivos.add(diretorio + "comIterWhileErrado4.php");
        	arquivos.add(diretorio + "comIterForCerto.php");
        	arquivos.add(diretorio + "comIterForErrado1.php");
        	arquivos.add(diretorio + "comIterForErrado2.php");
        	arquivos.add(diretorio + "comIterForErrado3.php");
        	arquivos.add(diretorio + "comIterForeachCerto.php");
        	arquivos.add(diretorio + "comIterForeachErrado1.php");
        	arquivos.add(diretorio + "comIterForeachErrado2.php");
        	arquivos.add(diretorio + "chamadaFuncaoCerto.php");
        	arquivos.add(diretorio + "chamadaFuncaoErrado1.php");
        	
			for (String fileName : arquivos) {
				System.out.println("-------------------------------------");
				System.out.println(" - " + fileName + ":");
				try {
					PhpLexer lexer = new PhpLexer(new FileReader(fileName));
					PhpParser parser = new PhpParser(lexer);
					parser.parse();
				} catch (FileNotFoundException e) {
					System.err.println("Erro: arquivo nao encontrado\n");
					continue;
				} catch (Exception e) {
					System.err.println("Erro de analise: " + e.getMessage() + "\n");
					continue;
				} catch (Error e) {
					String erro = e.getMessage();
					String[] elementos = erro.split("\\*\\*");
					String linha = elementos[0];
					String coluna = elementos[1];
					if (linha.equals("-1")) {
						System.err.println("Erro em linha indeterminada. Checar fim de arquivo inesperado (esperando fechamento de parenteses, chaves ou aspas)");
					}
					else {
						System.err.println("Erro na linha " + elementos[0] + ", na coluna " + elementos[1] + "\n");
					}
					continue;
				}
				System.out.println("ok\n");
			}

        }
}